import { observe } from "./observe/index.js"

export function initState(vm){
    const opts = vm.$options
    if(opts.props){
        initProps(vm)
    }
    if(opts.methods){
        initMethods(vm)
    }
    if(opts.data){
        initData(vm)
    }
    if(opts.computed){
        initComputed(vm)
    }
    if(opts.watch){
        initWatch(vm)
    } 
}
function initProps(vm){

}
function initMethods(vm){
    
}
function proxy(vm, source, key){
    Object.defineProperty(vm, key,{
        get(){
            return vm[source][key]
        },
        set(newValue){
            vm[source][key] = newValue
        }
    })
}

// 数据初始化
function initData(vm){
    let data = vm.$options.data
    data = vm._data = typeof data == 'function'? data.call(vm):data
    for(let key in data){
        proxy(vm,'_data', key)
    }
    observe(data)
}
function initComputed(vm){
    
}
function initWatch(vm){
    
}